{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "# 第5章.异常检测\n",
    "## 5.1.新颖点检查"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 864x432 with 2 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.svm import OneClassSVM\n",
    "from sklearn.datasets import make_blobs\n",
    "from numpy import quantile,where,random\n",
    "from matplotlib.font_manager import FontProperties\n",
    "import matplotlib.pyplot as plt\n",
    "#0.1 生成用于聚类的具有各向同性的,符合高斯分布的数据集\n",
    "random.seed(13)\n",
    "# 两个特征变量,centers=1,即数据集包含的类别数\n",
    "x,_ = make_blobs(n_samples=200,n_features=2,centers=1,cluster_std=0.3,center_box=(8,8))\n",
    "# 初始化画布\n",
    "fig = plt.figure(figsize=(12,6))\n",
    "# 支持中文\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号\n",
    "\n",
    "# 下面是进行异常检测的两种方式\n",
    "## 方法1.使用预测方法predict方法做异常检测\n",
    "## 1.1 定义OneClassSVM对象\n",
    "svm = OneClassSVM(kernel='rbf',gamma=0.001,nu=0.3)\n",
    "## 1.2.拟合模型,并作出预测\n",
    "svm.fit(x)\n",
    "pred = svm.predict(x)\n",
    "#1.3 过滤出预测值为-1的样本点(为异常值,外点)\n",
    "anom_index = where(pred==-1)\n",
    "anom_values_1 = x[anom_index]\n",
    "#1.4.可视化异常点,并把异常点用红色显示\n",
    "plt.subplot(1,2,1)\n",
    "plt.scatter(x[:,0],x[:,1])\n",
    "plt.scatter(anom_values_1[:,0],anom_values_1[:,1],color='r')\n",
    "plt.title(\"predict()方法\")\n",
    "\n",
    "# 方法2：使用评分函数score_samples进行异常点检测\n",
    "svm = OneClassSVM(kernel='rbf',gamma=0.001,nu=0.3)\n",
    "## 2.2.拟合模型,并计算样本的评分\n",
    "pred = svm.fit_predict(x)\n",
    "scores = svm.score_samples(x)\n",
    "# 2.3 使用分位数获得一个阈值.本列中使用最低的4%分数值为阈值\n",
    "# 也就是说,低于这个分位数值的样本点为异常点\n",
    "threshold = quantile(scores,0.04)\n",
    "# 2.4 分数与阈值比较,获得异常点\n",
    "anom_index = where(scores<=threshold)\n",
    "anom_values_2 = x[anom_index]\n",
    "# 2.5.可视化异常点,并把异常点用红色标出\n",
    "plt.subplot(1,2,2)\n",
    "plt.scatter(x[:,0],x[:,1])\n",
    "plt.scatter(anom_values_2[:,0],anom_values_2[:,1],color='r')\n",
    "plt.title(f\"score_samples方法,阈值为{round(threshold)}\")\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-09-11T06:56:23.716492400Z",
     "start_time": "2023-09-11T06:56:21.654281900Z"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 5.2.异常点检测\n",
    "### 5.2.1.椭圆包络线\n",
    "<P>椭圆包络线将创建一个椭圆区域,所有落在椭圆区域内的数据皆为正常点,落在椭圆区域外的点是离群点</P>"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "新数据集:\n",
      " [[10.  10. ]\n",
      " [ 1.5  1. ]\n",
      " [ 1.   1. ]\n",
      " [ 1.   1. ]] \n",
      "\n",
      "预测结果:\n",
      " [-1  1  1  1]\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.covariance import EllipticEnvelope\n",
    "\n",
    "# 创建拟合(训练)数据集\n",
    "df = pd.DataFrame(np.array([[0,1],[1,1],[1,2],[2,2],[5,6]]),columns=['x','y'],index=[0,1,2,3,4])\n",
    "# 并把数据集转化为numpy形式\n",
    "data = df[['x','y']].values\n",
    "# 初始化一个椭圆包络线评估器对象\n",
    "# 参数contamination训练数据集中离群点所占的百分比\n",
    "model1 = EllipticEnvelope(contamination=0.1)\n",
    "model1.fit_predict(data)\n",
    "# 构建一个新数据集(用于预测使用)\n",
    "new_data= np.array([[10,10],[1.5,1],[1,1],[1,1]])\n",
    "# 预测新数据\n",
    "pred1 = model1.predict(new_data)\n",
    "# 输出\n",
    "print('新数据集:\\n',new_data,'\\n')\n",
    "print(\"预测结果:\\n\",pred1)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-09-11T07:38:05.146357300Z",
     "start_time": "2023-09-11T07:38:05.100369200Z"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "### 5.2.3.局部离群点因子算法\n",
    "<P>局部离群点因子的算法的核心思想:比较第一个数据点p与其第K个最近距离内各点的局部密度,如果他比其临近点的密度低得多，则称点p为离群点.其中K为预设参数</P>"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "离群点个数:1\n",
      "---------------------\n",
      "第1个数据点是正常点\n",
      "第2个数据点是正常点\n",
      "第3个数据点是正常点\n",
      "第4个数据点是离群点\n",
      "第5个数据点是正常点\n",
      "-------------------------------------\n",
      "第1个数据点LOF相反数是-1.0\n",
      "第2个数据点LOF相反数是-1.0\n",
      "第3个数据点LOF相反数是-1.0\n",
      "第4个数据点LOF相反数是-1.6666666666444445\n",
      "第5个数据点LOF相反数是-1.0\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from sklearn.neighbors import LocalOutlierFactor\n",
    "\n",
    "# 构造数据集\n",
    "X0 = [[1,1],[4,1],[2,2],[1,6],[4,3]]\n",
    "X = np.array(X0)\n",
    "# 本例中设置k=2\n",
    "clf = LocalOutlierFactor(n_neighbors=2,metric='manhattan')\n",
    "# fit_predict()返回1表示为正常点,-1表示为离群点\n",
    "is_inlier=clf.fit_predict(X)\n",
    "numOfOutlier = np.sum(is_inlier==-1)\n",
    "print(f\"离群点个数:{numOfOutlier}\")\n",
    "print(\"-\"*21)\n",
    "for i,flag in enumerate(is_inlier):\n",
    "    if flag==1:\n",
    "        print(f\"第{i+1}个数据点是正常点\")\n",
    "    else:\n",
    "        print(f\"第{i+1}个数据点是离群点\")\n",
    "print(\"-\"*37)\n",
    "scores = clf.negative_outlier_factor_\n",
    "for i,score in enumerate(scores):\n",
    "    print(f'第{i+1}个数据点LOF相反数是{score}')"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-09-11T12:12:45.947067600Z",
     "start_time": "2023-09-11T12:12:45.936076900Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
